home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / system / EList.st < prev    next >
Encoding:
Text File  |  2004-01-31  |  3.5 KB  |  135 lines

  1. " ------------------------------------------------------------------- "
  2. " The EList Class implements Exec list functions.                     "
  3. " ------------------------------------------------------------------- "
  4.  
  5. Class EList :Object ! private listName !
  6. [
  7.    insertNode: nodeObj Into: listObj after: predObj
  8.       <primitive 209 4 41 listObj nodeObj predObj>
  9. |
  10.    addHead: nodeObj to: listObj
  11.       <primitive 209 4 42 listObj nodeObj>
  12. |
  13.    addTail: nodeObj to: listObj
  14.       <primitive 209 4 43 listObj nodeObj>
  15. |
  16.    removeNode: nodeObj
  17.       <primitive 209 4 44 nodeObj>
  18. |
  19.    removeHeadFrom: listObj
  20.       ^ <primitive 209 4 45 listObj>
  21. |
  22.    removeTailFrom: listObj
  23.       ^ <primitive 209 4 46 listObj>
  24. |
  25.    enqueue: nodeObj toList: listObj
  26.       <primitive 209 4 47 listObj nodeObj>
  27. |
  28.    findNamedNode: nodeName in: listObj
  29.       ^ <primitive 209 4 48 listObj nodeName>
  30. |
  31.    dispose 
  32.       <primitive 209 0 2 private>.
  33.  
  34.       ^ nil
  35. |
  36.    listToStringArray
  37.    
  38.       ^ <primitive 209 4 105 private>
  39. |
  40.    new: newListName
  41.       private  <- <primitive 209 0 1 99>.
  42.      
  43.       listName <- newListName.
  44.       
  45.       ^ self
  46. ]
  47.  
  48. " -------------------------------------------------------------------- "
  49. " What good is an EList without ENodes??                               "
  50. " -------------------------------------------------------------------- "
  51.  
  52. Class ENode :Object ! private myName !
  53. [
  54.    new: newNodeName ! temp !
  55.       private <- <primitive 209 0 1 105>.
  56.       temp    <- <primitive 209 0 0 (newNodeName size)>.
  57.  
  58.       <primitive 209 0 5 temp newNodeName 0>.
  59.       <primitive 209 0 6 private temp 10>.
  60.  
  61.       myName <- newNodeName.
  62.       
  63.       ^ self
  64. |
  65.    dispose
  66.       <primitive 209 0 2 <primitive 209 0 7 private 10> >.
  67.       <primitive 209 0 2 private>.
  68.  
  69.       ^ nil
  70. |
  71.    successor ! bytes succNode !
  72.       bytes <- ByteArray new: 4.
  73.       
  74.       <primitive 209 0 3 private bytes 0>.
  75.       
  76.       succNode <- (bytes at: 1) bitShift: 24.
  77.       succNode <- succNode + ((bytes at: 2) bitShift: 16).
  78.       succNode <- succNode + ((bytes at: 3) bitShift: 8).
  79.       succNode <- succNode +  (bytes at: 4).
  80.  
  81.       ^ succNode " This node is next in a EList "
  82. |
  83.    predecessor ! bytes predNode !
  84.       bytes <- ByteArray new: 4.
  85.       
  86.       <primitive 209 0 3 private bytes 4>.
  87.       
  88.       predNode <- (bytes at: 1) bitShift: 24.
  89.       predNode <- predNode + ((bytes at: 2) bitShift: 16).
  90.       predNode <- predNode + ((bytes at: 3) bitShift: 8).
  91.       predNode <- predNode +  (bytes at: 4).
  92.  
  93.       ^ predNode " This node is before me in a EList "
  94. |
  95.    nodeType ! bytes !
  96.       bytes <- ByteArray new: 2.
  97.       
  98.       <primitive 209 0 3 private bytes 8>.
  99.       
  100.       ^ bytes at: 1
  101. |
  102.    nodePriority ! bytes !
  103.       bytes <- ByteArray new: 2.
  104.       
  105.       <primitive 209 0 3 private bytes 9>.
  106.       
  107.       ^ bytes at: 1
  108. |
  109.    nodeName
  110.       ^ myName
  111. |
  112.    setSuccessor: successorNode
  113.       <primitive 209 0 6 private successorNode 0>.
  114. |
  115.    setPredecessor: predecessorNode
  116.       <primitive 209 0 6 private predecessorNode 4>.
  117. |
  118.    setNodeType: nodeType  " nodeType has to be an Integer! "
  119.       <primitive 209 0 6 private (nodeType bitAnd: 16rFF) 8>.
  120. |
  121.    setNodePriority: newPriority
  122.       <primitive 209 0 6 private (newPriority bitAnd: 16rFF) 9>.
  123. |
  124.    changeNodeName: newNodeName ! temp !
  125.  
  126.       <primitive 209 0 2 <primitive 209 0 7 private 10> >.
  127.  
  128.       temp <- <primitive 209 0 0 (newNodeName size)>.
  129.  
  130.       <primitive 209 0 5 temp newNodeName 0>.
  131.       <primitive 209 0 6 private temp 10>.
  132.       
  133.       myName <- newNodeName
  134. ]
  135.